package org.example.huweb.web.sys_Carousel.service.impl;

import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import lombok.extern.slf4j.Slf4j;
import org.example.entity.SysCarouselRole;
import org.example.huweb.web.sys_Carousel.mapper.SysCarouselDao;
import org.example.huweb.web.sys_Carousel.service.SysCarouselService;
import org.example.utils.consoleOutput;
import org.springframework.stereotype.Service;

import java.util.List;

@Service
@Slf4j
public class SysCarouselServiceImpl extends ServiceImpl<SysCarouselDao, SysCarouselRole> implements SysCarouselService {

    @Override
    public void updateCarousel(SysCarouselRole sysCarouselRole) {
        // 更新
        if (!this.updateById(sysCarouselRole)){
            throw new RuntimeException("更新轮播图失败");
        }
    }

    @Override
    public void addCarousel(SysCarouselRole dto) {
        // 获取最后一个排序号
        List<SysCarouselRole> list = this.list(
                new QueryWrapper<SysCarouselRole>()
                        .orderByDesc("c_priority")
        );
        // 获取是否显示
        //getCIsShow 方法的返回值是字符串类型，是否展示
        //0 ,false : 不展示
        //1 ,true : 展示
        //其他默认为不展示
        String cIsShow = dto.getCIsShow();
        if (cIsShow.equals("true")){
            dto.setCIsShow("1");
        }else{
            dto.setCIsShow("0");
        }
        // 设置排序号
        if (!list.isEmpty()) {
            dto.setCPriority(list.get(0).getCPriority() + 1);
        } else {
            dto.setCPriority(1);
        }
        log.info("添加轮播图 : {}", dto);

        // 保存
        if (!this.save(dto)) {
            throw new RuntimeException("添加轮播图失败");
        }
    }



    @Override
    public void sortCarousel(int wantId, int byId) {
        // 获取想要排序的对象
        SysCarouselRole want = this.getById(wantId);
        if (want == null) {
            throw new RuntimeException( "id:" + wantId + "轮播图不存在");
        }

        // 获取被排序的对象
        SysCarouselRole by = this.getById(byId);
        if (by == null) {
            throw new RuntimeException("id:" + byId + "轮播图不存在");
        }
        // 交换排序号
        Integer cPriority = want.getCPriority();
        want.setCPriority(by.getCPriority());
        this.updateById(want);
        by.setCPriority(cPriority);
        this.updateById(by);
        log.info("轮播图排序 : {} -> {}", wantId, byId);

    }

    @Override
    public List<SysCarouselRole> getCarouselList() {
        List<SysCarouselRole> list = this.list();
        if (list == null || list.isEmpty()) {
            return null;
        }
        // 过滤
        list.removeIf(sysCarouselRole -> {
            /*
              getCIsShow 方法的返回值是字符串类型，是否展示
              0 ,false : 不展示
              1 ,true : 展示
              其他默认为不展示
              removeIf 方法的返回值是 boolean 类型，
              返回 true 表示移除当前元素，返回 false 则表示保留当前元素
             */
            return !(sysCarouselRole.getCIsShow().equals("1"));
        });
        // 排序
        list.sort((o1, o2) -> o1.getCPriority().compareTo(o2.getCPriority()));
        System.out.println("轮播图列表：");
        list.forEach(sysCarouselRole -> {
            System.out.println(sysCarouselRole.toString());
        });


        return list;
    }

    @Override
    public List<SysCarouselRole> getCarouselManageList() {
        // 管理员可以看到所有轮播图
        return this.list();
    }


    @Override
    public void deleteCarousel(int id) {
        // 获取要删除的对象
        SysCarouselRole carousel = this.getById(id);
        if (carousel == null) {
            throw new RuntimeException(id + "轮播图不存在");
        }

        // 删除
        if (!this.removeById(id)) {
            throw new RuntimeException("删除轮播图失败");
        }

        log.info("删除轮播图 : {}", id);

    }


}
